import { fileURLToPath, URL } from 'node:url'

import { type UserConfig, type ConfigEnv, loadEnv, defineConfig } from "vite";
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from '@vant/auto-import-resolver' // 新增vant解析器导入
import { resolve } from "path";
// https://vite.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode, process.cwd()); // 加载环境变量
  return {
    define: {//Vue I18N的esm-bundler版本需要明确设置特性标志，以避免生产环境中的体积问题。定义全局变量来替换这些标志
      __VUE_I18N_FULL_INSTALL__: true,
      __VUE_I18N_LEGACY_API__: true,
      __INTLIFY_PROD_DEVTOOLS__: false
    },
    server: {
      // 主机地址
      host: "0.0.0.0",
      // 端口号
      port: +env.VITE_APP_PORT,
      // 是否自动在浏览器中打开
      open: true,
      proxy: {
        // 代理前缀为 /dev-api 的请求
        [env.VITE_APP_BASE_API]: {
          changeOrigin: true,
          // 代理目标真实接口地址：https://api.youlai.tech
          target: env.VITE_APP_API_URL,
          rewrite: (path) =>
            path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""),
        },
      },
    },
    // css: {
    //   preprocessorOptions: {
    //     scss: {
    //       additionalData: `@import "@/static/uni.scss";`
    //     }
    //   }
    // },
    plugins: [
      vue(),
      vueDevTools(),
      // Components({
      //   // 自动导入组件
      //   dirs: ['src/components'], // 配置需要自动导入的组件目录
      //   dts: 'src/components.d.ts', // 生成类型声明文件
      // }),
      Components({ // 新增组件自动注册
        dirs: ['src/components/common'],
        directoryAsNamespace: true,
        include: [/\.vue$/, /\.vue\?vue/],
        exclude: [/[\\/]node_modules[\\/]/],
        dts: 'src/components.d.ts',
        resolvers: [
          (componentName) => {
            if (componentName.startsWith('Hs'))
              return { name: componentName, from: '@hs' }
          },
          VantResolver(),// vant组件自动注册
        ]
      })
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      },
    },
  }

})


